/*
 * Copyright (c) 2013 Adam Rudd.
 * See LICENSE for more information
 */
#ifndef _BASE64_H
#define _BASE64_H

/* b64_alphabet:
 *     Description: Base64 alphabet table, a mapping between integers
 *           and base64 digits
 *    Notes: This is an extern here but is defined in Base64.c
 */
extern const char b64_alphabet[];

/* base64_encode:
 *    Description:
 *      Encode a string of characters as base64
 *    Parameters:
 *      output: the output buffer for the encoding, stores the encoded string
 *      input: the input buffer for the encoding, stores the binary to be encoded
 *      inputLen: the length of the input buffer, in bytes
 *    Return value:
 *      Returns the length of the encoded string
 *    Requirements:
 *      1. output must not be null or empty
 *      2. input must not be null
 *      3. inputLen must be greater than or equal to 0
 */
int base64_encode(char *output, char *input, int inputLen);

/* base64_decode:
 *    Description:
 *      Decode a base64 encoded string into bytes
 *    Parameters:
 *      output: the output buffer for the decoding,
 *          stores the decoded binary
 *      input: the input buffer for the decoding,
 *           stores the base64 string to be decoded
 *      inputLen: the length of the input buffer, in bytes
 *    Return value:
 *      Returns the length of the decoded string
 *    Requirements:
 *      1. output must not be null or empty
 *      2. input must not be null
 *      3. inputLen must be greater than or equal to 0
 */
int base64_decode(char *output, char *input, int inputLen);

/* base64_enc_len:
 *    Description:
 *      Returns the length of a base64 encoded string whose decoded
 *      form is inputLen bytes long
 *    Parameters:
 *      inputLen: the length of the decoded string
 *    Return value:
 *      The length of a base64 encoded string whose decoded form
 *      is inputLen bytes long
 *    Requirements:
 *      None
 */
int base64_enc_len(int inputLen);

/* base64_dec_len:
 *    Description:
 *      Returns the length of the decoded form of a
 *      base64 encoded string
 *    Parameters:
 *      input: the base64 encoded string to be measured
 *      inputLen: the length of the base64 encoded string
 *    Return value:
 *      Returns the length of the decoded form of a
 *      base64 encoded string
 *    Requirements:
 *      1. input must not be null
 *      2. input must be greater than or equal to zero
 */
int base64_dec_len(char *input, int inputLen);

#endif // _BASE64_H
